const jwt = require('jsonwebtoken');
const { pool } = require('../shamall/db');

// 中间件：校验 access token （短 token）
function authenticateToken(req,res,next) {
    // 1. 从请求头获取 token
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];
    if (!token) return res.sendStatus(401);

    // 2. 校验 token
    jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
        if (err) return res.sendStatus(403);
        req.user = user; // 保存用户信息
        next();
    });
}

// 中间件：校验 refresh token (长 token)
function getUserData(req,res,next) {
    // 确保用户已通过认证
    if (!req.user) {
        return res.status(401).json({ message: '未授权访问' });
    }

    // 将用户ID添加到请求对象中，供后续路由使用
    req.userId = req.user.id || req.user.phone; // 根据你的token结构跳转
    next();
}

// 数据权限验证中间件
function checkDataOwnership(req, res, next) {
    const userId = req.userId;
    const dataId = req.params.id || req.body.id;

    if (!dataId) {
        return next(); // 如果没有数据ID，跳过检查
    }

    // 验证数据是否属于当前用户
    const sql = 'SELECT app_login_id FROM app_list WHERE id = ?';
    pool.query(sql, [dataId]).then(([rows]) => {
        if (rows.length === 0) {
            return res.status(404).json({ message: '数据不存在' });
        }

        if (rows[0].app_login_id !== userId) {
            return res.status(403).json({ message: '无权访问此数据' });
        }

        next();
    }).catch(err => {
        res.status(500).json({ message: '服务器错误' });
    })
}

module.exports = {
    authenticateToken,
    getUserData,
    checkDataOwnership
};